Σε αυτό το στάδιο εξερευνούμε τα δεδομένα έτσι ώστε να τα "γνωρίσουμε καλύτερα". Τα ερωτήματα που θα απαντηθούν από τα δεδομένα σε αυτό το στάδιο:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import re
df = pd.read_csv('data/final.csv')
df.head()
| Username | Date | Followers | Source | Location | Tweet | |
|---|---|---|---|---|---|---|
| 0 | CaeruleusCalva | 4. August 2021 | 1088.0 | Twitter for Android | Not So Ancient Greece | Όπως λένε και οι καθηγητές ΩΡΛ: Τα ανεμβολίαστ... |
| 1 | kambanellas | 4. August 2021 | 316.0 | Twitter for Android | Cyprus | @percentcrumpet @themist7 @Dr_kypri Δυστυχώς τ... |
| 2 | em56464 | 4. August 2021 | 116.0 | Twitter Web App | NaN | RT @Gerasim73424653: Χειροκροτούν τους πυροσβέ... |
| 3 | zetakosmatougk | 4. August 2021 | 2955.0 | Twitter for Android | greece | RT @Faklana38: Έχετε μισό λεπτό να σας μιλήσω ... |
| 4 | PeterParker_84 | 4. August 2021 | 149.0 | Twitter Web App | Timbuktu Κάτω Αχαίας | Σκέψου ούτε οι ίδιοι δεν εμπιστεύονται το εμβό... |
print("Number of tweets: {}".format(len(df)))
Number of tweets: 43670
#Visualize the Source column percentages.
colors = ['#93baf5','#6081b5', '#cbf7e6', '#5db0d4', '#7fa0fa']
p = df.Source.value_counts().head(5).plot.pie(x='lab', y='val', autopct='%1.1f%%', rot=2, colors=colors, figsize=(15,10));
p.set_title("Σηνυθισμένες συσκευές που χρησιμοποιούν οι Έλληνες του Twitter");
tweet_id = 222
tweet = df.iloc[tweet_id]
print("Tweet: {}".format(tweet["Tweet"]))
Tweet: Μητροπολίτης Κύριλλος – «Μη με καλείτε και ζητάτε κρεβάτι σε ΜΕΘ» https://t.co/JvMnAMYsx1 #Covid_19 #COVIDIOTS #COVID #coronavirus #CovidVaccine #vaccination #ΕΜΒΟΛΙΑΣΜΟΙ #Εμβολιο #εμβολια #εμβολιασμενοι
Με τη συνάρτηση df.groupby().mean().nlargest() εντοπίζουμε τους χρήστες με τους περισσότερους ακολούθους και τους κατατάσουμε με το όνομα χρήστη τους.
most_followers = df.groupby('Username')['Followers'].mean().nlargest(15)
most_followers
Username Yanis Varoufakis 1.027909e+06 skaigr 6.453257e+05 atsipras 5.687290e+05 Η ΚΑΘΗΜΕΡΙΝΗ 4.111096e+05 Kathimerini_gr 4.107872e+05 enikos.gr 4.002280e+05 protothema 3.206407e+05 Athens Voice 2.994400e+05 Real_gr 2.993880e+05 AdonisGeorgiadi 2.669090e+05 Το Βήμα - To Vima 2.237281e+05 tovimagr 2.236210e+05 Protagon.gr 2.230180e+05 naftemporiki.gr 1.890560e+05 TA NEA 1.694963e+05 Name: Followers, dtype: float64
ax = most_followers.plot(kind='barh', figsize=(10, 12), color='#b4aeeb', zorder=2, width=0.85)
plt.gca().invert_yaxis()
sns.despine(bottom = True, left = True)
plt.ylabel(None)
plt.xticks(None)
plt.xticks([])
plt.yticks(fontsize=18, rotation=0)
for index, value in enumerate(most_followers):
plt.text( value, index, str(round(value, 2)), va = 'center', ha='left', fontsize=16)
plt.suptitle('Οι χρήστες με τους περισσότερους followers'.title(), fontsize=20)
plt.show()
most_tweets_users = df.Username.value_counts().reset_index()
most_tweets_users.columns = ['Username','counts']
most_tweets_users.head(20)
| Username | counts | |
|---|---|---|
| 0 | Sigma Total | 180 |
| 1 | sofia_tzani | 127 |
| 2 | SigmaTotal | 123 |
| 3 | dimpenewscom1 | 120 |
| 4 | Angel | 113 |
| 5 | NIptamenos | 104 |
| 6 | sunoo_trash | 98 |
| 7 | eXf696OqZOibmMk | 98 |
| 8 | xoristrastimesi | 81 |
| 9 | Terez | 79 |
| 10 | S✟avros ΜANTAS | 78 |
| 11 | pluralismos.gr 🇬🇷 🇨🇾 🇪🇺 ⚽ 🏀 | 77 |
| 12 | PRESSING.GR | 72 |
| 13 | Chris | 71 |
| 14 | Δίδα Σαλονικιά🇬🇷🇨🇾🇬🇧🇩🇪 🇭🇺 | 70 |
| 15 | pro-news | 70 |
| 16 | THIVAHELLAS | 70 |
| 17 | ms666__ | 70 |
| 18 | JithuShajiVar4 | 70 |
| 19 | Elizah_Manolia | 69 |
users = df['Username'].apply(pd.Series).stack().value_counts().head(10)
ax = users.plot(kind='barh', figsize=(10, 12), zorder=2, width=0.85)
plt.gca().invert_yaxis()
sns.despine(bottom = True, left = True)
plt.ylabel(None)
plt.xticks(None)
plt.xticks([])
plt.yticks(fontsize=18, rotation=0)
for index, value in enumerate(users):
plt.text( value, index, str(round(value, 2)), va = 'center', ha='left', fontsize=16)
plt.suptitle('Οι χρήστες που εμφανίζονται πιο πολύ στο αρχείο δεδομένων'.title(), fontsize=15)
plt.show()
Βρίσκουμε τη περιοχή από την οποία δημοσιεύτηκαν τα περισσότερα tweets.
most_tweets_users = df.Location.value_counts().reset_index()
most_tweets_users.columns = ['Location','counts']
most_tweets_users.head(20)
| Location | counts | |
|---|---|---|
| 0 | Greece | 1829 |
| 1 | Ελλάς | 1578 |
| 2 | Athens | 1056 |
| 3 | Athens, Greece | 961 |
| 4 | Αττική, Ελλάς | 949 |
| 5 | Cyprus | 393 |
| 6 | Αθήνα | 356 |
| 7 | Ελλάδα | 260 |
| 8 | Θεσσαλονίκη, Ελλάς | 255 |
| 9 | Attiki, Greece | 220 |
| 10 | Thessaloniki | 216 |
| 11 | Κεντρική Μακεδονία, Ελλάς | 210 |
| 12 | HELLAS | 197 |
| 13 | Thessaloniki, Greece | 161 |
| 14 | Athens Greece | 159 |
| 15 | Λάρισα | 156 |
| 16 | Hellas | 153 |
| 17 | Θεσσαλονίκη | 149 |
| 18 | Ηράκλειο, Ελλάς | 137 |
| 19 | Patras, Greece | 129 |
colors = ['#93baf5','#d5abd9', '#cbf7e6', '#5db0d4', '#ebcaea','#a2ebe1','#a9aade']
p = df.Location.value_counts().head(7).plot.pie(x='Location', autopct='%1.1f%%', startangle=90,
rot=2, colors=colors, figsize=(14,10));
p.set_title("Location pie chart");
plt.ylabel(None);
date_counts = df[['Tweet', 'Date']].groupby(['Date']).count().reset_index()
most_tweets = date_counts.groupby('Date')['Tweet'].mean().nlargest(20).reset_index()
most_tweets.columns = ['date','count']
most_tweets.head(20)
| date | count | |
|---|---|---|
| 0 | 23. July 2021 | 3108 |
| 1 | 17. Jul. 2021 | 2454 |
| 2 | 22. July 2021 | 2408 |
| 3 | 26. July 2021 | 2374 |
| 4 | 1. August 2021 | 2315 |
| 5 | 27. July 2021 | 2237 |
| 6 | 22. Jul. 2021 | 2029 |
| 7 | 25. July 2021 | 1992 |
| 8 | 16. Jul. 2021 | 1910 |
| 9 | 13. Jul. 2021 | 1849 |
| 10 | 19. Jul. 2021 | 1807 |
| 11 | 20. Jul. 2021 | 1797 |
| 12 | 18. Jul. 2021 | 1754 |
| 13 | 24. July 2021 | 1742 |
| 14 | 26. Jul. 2021 | 1597 |
| 15 | 23. Jul. 2021 | 1554 |
| 16 | 4. August 2021 | 1461 |
| 17 | 25. Jul. 2021 | 1299 |
| 18 | 30. July 2021 | 1224 |
| 19 | 21. Jul. 2021 | 1146 |
import plotly.express as px
px.line(most_tweets, x = 'date', y = 'count', title = 'Tweet counts per day lineplot')
Υπολογίζουμε τα Tweets που περιέχουν hashtag, το οποίο συμβολίζεται με '#'.
tweets_with_hashtag = df[df['Tweet'].str.contains('#')==True]
print("Ο αριθμός των tweets που περιέχουν hashtag: {}".format(len(tweets_with_hashtag)))
Ο αριθμός των tweets που περιέχουν hashtag: 13782
Με ανάλογο τρόπο μπορούμε να εντοπίσουμε και τα tweets που δεν περιέχουν hashtag σε μια συλλογή με tweets.
tweets_without_hashtag = df[df['Tweet'].str.contains('#')==False]
print("Ο αριθμός των tweets που δεν περιέχουν hashtag: {}".format(len(tweets_without_hashtag)))
Ο αριθμός των tweets που δεν περιέχουν hashtag: 29416
#Save the file
hastag_frame = pd.read_csv('HASHTAG.csv')
hashtag = hastag_frame.has_hashtag.value_counts().plot.pie(x='lab', y='val', autopct='%1.1f%%', rot=2,figsize=(12,8));
plt.suptitle('Ποσοστό δημοσιεύσεων με hashtag'.title(), fontsize=20);
Υπολογίζουμε τα tweets που περιέχουν link και στη συνέχεια βλέπουμε με την εντολή sum() τον αριθμό τους.
tweets_with_url = df[df['Tweet'].str.contains('http')==True]
print("Ο αριθμός των tweets που περιέχουν link: {}".format(len(tweets_with_url)))
Ο αριθμός των tweets που περιέχουν link: 15530
Επιβεβαιώνουμε την ύπαρξη link σε κάποιες από τις εγγραφές
tweets_with_url['Tweet'][37756]
'@StellaThki @PrimeministerGR Το περίμενα πως θα πεταχτεί ένας ψευτοειδικός του τουϊτερ (ή απλά ένας που έχει υποστει πλύση εγκεφαλου απο τα #μμε_ξεφτιλες) για να κανει τον συνηγορο. Λυπαμαι αλλα κουβα και εσυ. 👇 https://t.co/SopjgdWmj6'
Υπολογίζουμε τα tweets που δεν περιέχουν link και στη συνέχεια βλέπουμε με την εντολή sum() τον αριθμό τους.
tweets_without_url = df[df['Tweet'].str.contains('http')==False]
print("Ο αριθμός των tweets που δεν περιέχουν link: {}".format(len(tweets_without_url)))
Ο αριθμός των tweets που δεν περιέχουν link: 27668
url_frame = pd.read_csv('url_frame.csv')
url_frame
| Username | Date | Followers | Source | Location | Tweet | has_url | |
|---|---|---|---|---|---|---|---|
| 0 | PeterParker_84 | 4. August 2021 | 149.0 | Twitter Web App | Timbuktu Κάτω Αχαίας | Σκέψου ούτε οι ίδιοι δεν εμπιστεύονται το εμβό... | True |
| 1 | EvgenTzavaras | 4. August 2021 | 1813.0 | Twitter for Android | NaN | @TheSupremacist_ @DeucalionEl Ημαρτον. Ξεστραβ... | True |
| 2 | Faklana38 | 4. August 2021 | 1091.0 | Twitter for Android | Bachelor τσαρδί | Έχετε μισό λεπτό να σας μιλήσω για το εμβόλιο ... | True |
| 3 | e_thessalia | 4. August 2021 | 2200.0 | E-ThessaliaAutoPosting | Volos, Greece | Το εμβόλιο της Pfizer αναμένεται να εξασφαλίσε... | True |
| 4 | malaganas | 4. August 2021 | 17.0 | Twitter for Android | NaN | Εσείς κύριε το έχετε κάνει το εμβόλιο;\n...\n\... | True |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 43193 | NTrachiotis | 3. August 2021 | 4743.0 | Twitter for Android | Ελευσινα | #καυσωνας #γυναικοκτονια #εμβολιασμος #βαρυ... | False |
| 43194 | KyrEnotiadis | 3. August 2021 | 2423.0 | Twitter Web App | Ελλάς | Η Ελλάδα στη κόκκινη λίστα του Ισραήλ. Όποιος... | False |
| 43195 | Minas_Is_Here | 3. August 2021 | 182.0 | Twitter for Android | NaN | @oentoleas @Equ8InpwiQ696vT Ερώτηση κάνω γιατί... | False |
| 43196 | par_asimos | 3. August 2021 | 1288.0 | Twitter for Android | here | @30__kai Μη φοβάσαι. Οι ήρωες είναι εμβολιασμε... | False |
| 43197 | Mmonemv | 3. August 2021 | 64.0 | Twitter for Android | Πευκη Αττικη | @nick_balabinis @dspdspdsp @atsipras Τι λες ρε... | False |
43198 rows × 7 columns
tag = url_frame.has_url.value_counts().head(5).plot.pie(x='lab', y='val', autopct='%1.1f%%', rot=2,figsize=(12,8));
plt.suptitle('Ποσοστό δημοσιεύσεων με link'.title(), fontsize=20);
Υπολογίζουμε τα tweets που περιέχουν αναφορά (mention) η οποία στο Twitter συμβολίζεται με @.
tweets_with_mention = df[df['Tweet'].str.contains('@')== True]
print("Ο αριθμός των tweets που περιέχουν mention: {}".format(len(tweets_with_mention)))
Ο αριθμός των tweets που περιέχουν mention: 17889
tweets_without_mention = df[df['Tweet'].str.contains('@')== False]
print("Ο αριθμός των tweets που δεν περιέχουν mention: {}".format(len(tweets_without_mention)))
Ο αριθμός των tweets που δεν περιέχουν mention: 25309
mention_frame = pd.read_csv('MENTIONS.csv')
tag = mention_frame.has_mention.value_counts().head(5).plot.pie(x='lab', y='val', autopct='%1.1f%%', rot=2,figsize=(12,8));
plt.suptitle('Ποσοστό δημοσιεύσεων με mention'.title(), fontsize=20);
tweets_with_emojis = df[df['Tweet'].str.contains('😂')== True]
print("Ο αριθμός των tweets που περιέχουν το emoji: {}".format(len(tweets_with_emojis)))
Ο αριθμός των tweets που περιέχουν το emoji: 816
tweets_with_emojis['Tweet'][198]
'@paparopoulos_g Είναι λιοντάρι μετά από το εμβόλιο....😂🤣😂🤣😂🤣'
Υπολογίζουμε τα tweets που είναι retweets και όχι αυτούσια. Στο twitter αυτό συμβολίζεται με RT
retweets = df[df['Tweet'].str.startswith('RT')== True]
print("Ο αριθμός των retweets: {}".format(len(retweets)))
Ο αριθμός των retweets: 912
retweets = pd.read_csv('Retweeted.csv')
no_retweets = df[df['Tweet'].str.startswith('RT')== False]
print("Ο αριθμός των tweets που δεν είναι retweet: {}".format(len(no_retweets)))
Ο αριθμός των tweets που δεν είναι retweet: 42286
retweets_plot = retweets.is_retweet.value_counts().head().plot.pie(x='lab', y='val', autopct='%1.1f%%', rot=2,figsize=(12,8));
plt.suptitle('Ποσοστό δημοσιεύσεων που είναι retweets'.title(), fontsize=20);